package cn.b.sky.user.service;

import cn.b.sky.common.model.BatchJobReport;
import cn.b.sky.user.service.model.*;
import cn.b.sky.user.service.model.condition.UserCondition;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 
 * @ClassName: UserService
 * @Description:用户管理业务接口
 * @author: ZhaoXin
 * @date: 2015-7-31 下午01:07:21
 * @version: V1.0
 *
 */
public interface UserService {

  /**
   * 
   * @Title:selectUserList
   * @Description:查询用户列表
   * @param userCondition
   * @return List<UserInfo>
   * @author: ZhaoXin
   * @date: 2015-7-31 下午01:06:15
   * @version: V1.0
   */
  public List<UserInfo> selectUserList(UserCondition userCondition);

  /**
   * 
   * @Title:selectUserListCount
   * @Description:查询用户条数
   * @param userCondition
   * @return int
   * @author: ZhaoXin
   * @date: 2015-7-31 下午01:06:38
   * @version: V1.0
   */
  public int selectUserListCount(UserCondition userCondition);

  /**
   * 
   * @Title:selectAllLanaguage
   * @Description:查询所有语言
   * @return List<LanguageInfo>
   * @author: ZhaoXin
   * @date: 2015-8-3 上午11:11:14
   * @version: V1.0
   */
  List<Language> selectAllLanaguage();

  /**
   * 
   * @Title:selectTimeZone
   * @Description:查询时区
   * @return List<TimeZoneInfo>
   * @author: ZhaoXin
   * @date: 2015-8-3 上午11:16:02
   * @version: V1.0
   */
  List<TimeZone> selectTimeZone();

  /**
   * 
   * <strong>Title : insertUser<br>
   * </strong> <strong>Description : </strong>新增用户<br>
   * <strong>Create on : 2015-8-4 下午05:40:14<br>
   * </strong>
   * <p>
   * 
   * @param userInfo
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertUser(UserInfo userInfo);

  /**
   * 
   * <strong>Title : selectOrganizationByUser<br>
   * </strong> <strong>Description : </strong>查询用户对应的组织<br>
   * <strong>Create on : 2015-8-4 下午07:48:34<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param userCode
   * @return List<Organization>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Organization> selectOrganizationByUser(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : selectRoleByUser<br>
   * </strong> <strong>Description : </strong>查询用户对应的角色<br>
   * <strong>Create on : 2015-8-4 下午07:51:14<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param userCode
   * @return List<Role>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Role> selectRoleByUser(String siteCode, String userCode);

  /**
   * 
   * <strong>Title : selectUser<br>
   * </strong> <strong>Description : </strong>查询用户<br>
   * <strong>Create on : 2015-8-4 下午08:47:16<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param userCode
   * @return UserInfo
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  UserInfo selectUser(@Param("siteCode") String siteCode, @Param("userCode") String userCode);

  /**
   * 
   * <strong>Title : selectUserParameter<br>
   * </strong> <strong>Description : </strong>查询用户参数<br>
   * <strong>Create on : 2015-8-4 下午08:54:28<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param userCode
   * @return List<UserParameter>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserParameter> selectUserParameter(String siteCode, String userCode);

  /**
   * 
   * <strong>Title : updateUser<br>
   * </strong> <strong>Description : </strong>更新用户<br>
   * <strong>Create on : 2015-8-4 下午09:46:43<br>
   * </strong>
   * <p>
   * 
   * @param userInfo
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateUser(UserInfo userInfo);

  /**
   * 
   * <strong>Title : deleteUser<br>
   * </strong> <strong>Description : </strong>删除用户<br>
   * <strong>Create on : 2015-8-4 下午09:42:34<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param userCode
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  BatchJobReport deleteUser(String siteCode, String userCode);

  /**
   * 
   * <strong>Title : selectUserByOrganization<br>
   * </strong> <strong>Description : </strong>根据组织结构查询用户<br>
   * <strong>Create on : 2015-8-10 上午10:36:03<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param organizationCode
   * @return List<UserInfo>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserInfo> selectUserByOrganization(String siteCode, String organizationCode);

  /**
   * 
   * <strong>Title : selectUserNotInOrganization<br>
   * </strong> <strong>Description : </strong>查询未划分组织结构的用户<br>
   * <strong>Create on : 2015-8-10 上午10:36:45<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @return List<UserInfo>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserInfo> selectUserNotInOrganization(String siteCode);

  /**
   * 
   * <strong>Title : selectUserTree<br>
   * </strong> <strong>Description : </strong>查询用户树<br>
   * <strong>Create on : 2015-8-10 上午10:49:34<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @return List<UserOrganization>
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<UserOrganization> selectUserTree(String siteCode);

  /**
   * 
   * <strong>Title : insertUserOrganization<br>
   * </strong> <strong>Description : </strong>新增用户组织<br>
   * <strong>Create on : 2015-8-4 下午05:41:27<br>
   * </strong>
   * <p>
   * 
   * @param userOranizations
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void insertUserOrganization(List<UserOrganization> userOranizations);

  /**
   * 
   * <strong>Title : deleteUserOrganizationByOrg<br>
   * </strong> <strong>Description : </strong>根据组织删除用户组织信息<br>
   * <strong>Create on : 2015-8-10 下午04:50:28<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param organizationCode
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void deleteUserOrganizationByOrg(String siteCode, String organizationCode);

  /**
   * 
   * <strong>Title : updateUserPwd<br>
   * </strong> <strong>Description : </strong>修改用户密码<br>
   * <strong>Create on : 2015-9-1 下午02:47:53<br>
   * </strong>
   * <p>
   * 
   * @param siteCode
   * @param userCode
   * @param password
   *            void
   * @throws
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  void updateUserPwd(String siteCode, String userCode, String password);

  /**
   * 
   * <strong>Title : selectUserSuggests<br>
   * </strong> <strong>Description : </strong>用户搜索建议<br>
   * <strong>Create on : 2016年4月11日 下午7:46:48<br>
   * </strong>
   * <p>
   * 
   * @param condition
   * @return List<UserInfo>
   * @throws
   * @author Yantao.Lu<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   *          <strong>修改历史:</strong><br>
   *          修改人 | 修改日期 | 修改描述<br>
   *          -------------------------------------------<br>
   * <br>
   * <br>
   */
  public List<UserInfo> selectUserSuggests(UserCondition condition);

}
